Справочное руководство по TDMS 7.0 API
VB Script
Смотри также Отправить замечание

Glossary Item Box

Исходный текст

Option Explicit
Call WorkWithProfiles()


'==============================================================================
' Выполнить выбранные пользователем действия над коллекцией профилей пользователей
' Выполнять скрипт может только системный администратор
'==============================================================================
Sub WorkWithProfiles()
        
        Dim SelDlg, RetVal, strAction, ArActions, ProfCol
        
        ArActions = Array("Создать новый профиль", "Удалить профиль пользователя")
        
        'Предоставить пользователю выбрать действие 
        Set SelDlg = ThisApplication.Dialogs.SelectDlg
        SelDlg.SelectFrom = ArActions 
        SelDlg.Prompt = "Выберите действие:"
        RetVal = SelDlg.Show
        
        'Если пользователь отменил диалог или ничего не выбрал, закончить работу.
        'Диалог вернул массив, поскольку был инициализирован строковым массивом
        If (RetVal <> TRUE) Or (UBound(SelDlg.Objects)<0) Then Exit Sub
        
        'ПОлучить ссылку на коллекцию профилей, созданных в приложении
        Set ProfCol = ThisApplication.Profiles
        
        'Выполнить все заданные действия
        For Each strAction In SelDlg.Objects
                If StrComp(strAction, ArActions(0))=0 Then
                                                                                            Call CreateProfile(ProfCol)
                ElseIf StrComp(strAction, ArActions(1))=0 Then
                                                                                            Call RemoveProfile(ProfCol)
                End If
        Next
End Sub
'==============================================================================


'==============================================================================
'Создать новый    профиль пользователя
'==============================================================================
Sub CreateProfile(ProfCol)
        Dim StrRet, NewProfile, StrSysName 
        
        'Запросить описание нового профиля
        StrRet = InputBox("Введите описание нового пользовательского профиля:")
        
        'Если введена пустая строка или диалог отменен, выйти из процедуры
        If StrRet="" Then Exit Sub
        
        'Проверить, существует ли такое системное имя; если да - запросить другое
        StrSysName = "PROFILE_TEST"
        testdesc = "Тестовый прфоиль"
        While ProfCol.Has(StrSysName)
                    StrSysName = InputBox("Введите другое сист. имя (такое уже есть):",, StrSysName)
        Wend
        
        'Узнать точное количество тестовых профилей
        With ProfCol
            For i = 0 to .Count - 1
                    if .Item(i).Description = testdesc Then
                        MsgBox ("Системное имя тестового профиля - " & .Item(i).SysName)
                    End If
            Next
        End With
        
        'Создать новый пользовательский профиль
        Set NewProfile = ProfCol.Create
        'Присвоить ему системное имя
        NewProfile.SysName =  StrSysName  
        '... и описание
        NewProfile.Description =  StrRet
        
        'Сообщить результат
        MsgBox ("Новый профиль создан в коллекции c индексом " & ProfCol.Index(NewProfile))
        'В логах отладчика выводим идентификатор
        ThisApplication.DebugPrint("Идентификатор нового профиля - " & NewProfile.Handle)
End Sub
'==============================================================================


'==============================================================================
'Удалить профиль из приложения
'==============================================================================
Sub RemoveProfile(ProfCol)
        Dim StrRet, index, prf, RetVal
        
        'Запросить индекс профиля для удаления. Он не должен превышать количество 
        'профилей, созданных в приложении
        StrRet = InputBox("Введите индекс профиля, который должен быть удален:" & Chr(13) &_
                         "(от 0 до " & ProfCol.Count-1 & "):")
        
        'Если введено не-число или диалог отменен, выйти из процедуры
        If (StrRet="") Or (Not IsNumeric(StrRet)) Then Exit Sub
        
        'Получить введенный индекс
        index = CLng(StrRet)
        
        'Возможно, введенное число выходит за границы допустимого диапазона
        If Not ProfCol.Has(index) Then
                MsgBox "Задан недопустимый индекс.", vbExclamation
                Exit Sub
        End If
        
        'Запросить подтверждение удаления
        Set prf = ProfCol.Item(index)
        RetVal =     MsgBox("Удалить профиль """ & prf.Description & """?", vbQuestion + vbYesNo)    
        
        'Попытаться удалить профиль
        If RetVal <> vbNo Then
                'Отключить обработку ошибок (они могут возникнуть при попытке удалить, 
                'например, профиль "Все пользователи")
                On Error Resume Next
                
                'Удалить профиль из коллекции
                ProfCol.Remove(prf)
                
                'Если ошибка, сообщить об этом
                If Err<>0 Then
                        MsgBox "Ошибка удаления типа объекта """ & ODef.Description & """" & Chr(13)_
                                    & "(возможно, в системе созданы объекты данного типа.)"_
                                    & Chr(13) &    "Код ошибки: " & Err, vbExclamation     
                End If
        End If        
End Sub
'==============================================================================


© 2023 CSoft Development. Все права защищены.